;-----------------------------------------------------------------------------
;  spr_3a.src -- SPR ライブラリ 2A モジュール
;  Copyright(c) 1994 SEGA
;  Written by H.E on 1994-07-25 Ver.1.00
;  Updated by H.E on 1994-07-25 Ver.1.00
;
;  このライブラリはスプライト３Ｄ表示処理モジュールで、以下のルーチンを含む。
;
;  SPR_3Tran2DtoCmd     -  ポリゴン描画コマンドの登録処理
;
;----------------------------------------------------------------------------
;
          .EXPORT     _SPR_3Tran2DtoCmd
          .IMPORT     _SpTComTbl
          .IMPORT     __sftra
;
; ダミーセクション定義
;
          .SECTION    TComTbl,DUMMY
zSortBZMin     .RES.L      1  ; i   フラッシュ単位前Ｚ座標最小値          
zSftCnt        .RES.L      1  ; i   ＺソートＺシフト数                    
zSortBlkCnt    .RES.L      1  ; i   Ｚソートブロック数                    
spriteDrawFlag .RES.L      1  ; i   変形スプライト描画フラグ              
otherDrawFlag  .RES.L      1  ; i   その他ポリゴン描画フラグ              
unitPixel      .RES.L      1  ; i   X,Y 1.0に対するスクリーンのピクセル数 
clipRatio      .RES.L      1  ; i   ３Ｄクリッピング率 [0]=X, [1]=Y       
clipZ          .RES.L      1  ; i   視点座標系クリップＺ [0]=min, [1]=max 
charTbl        .RES.L      1  ; i   スプライトキャラクタテーブル          
vertBright     .RES.L      1  ; i   頂点輝度テーブル                      
coordView3D    .RES.L      1  ; i   ３Ｄ視点座標変換後テーブル            
coord2D        .RES.L      1  ; i   ２Ｄ透視変換後テーブル                
dispFlag       .RES.L      1  ; i   表示フラグ                            
shdIdxTbl      .RES.L      1  ; i   シェーディングインデックステーブル    
gourGrayTopR   .RES.L      1  ; i   グーログレイ先頭ＶＲＡＭアドレス      
lookupTblR     .RES.L      1  ; i   ルックアップテーブルＶＲＡＭ内位置    
lightVector    .RES.L      1  ; i   光源ベクタ                            
viewMatrix     .RES.L      1  ; i   視点座標系への座標変換マトリックス    
worldMatrix    .RES.L      1  ; i   ワールド座標系への座標変換マトリックス
;
          .SECTION    T2DtoCmd,DUMMY
surfaceCount   .RES.L      1  ; i   面数                              
surface        .RES.L      1  ; i   面定義テーブル                    
surfBright     .RES.L      1  ; i   面輝度テーブル                    
zSortZMin      .RES.L      1  ; i/o フラッシュ単位現Ｚ座標最小値      
zSortZMax      .RES.L      1  ; i/o フラッシュ単位現Ｚ座標最大値      
prtyTbl        .RES.L      1  ; i/o 描画プライオリティブロックテーブル
cmdBuf         .RES.L      1  ; o   スプライトコマンドバッファ        
outCmdPos      .RES.L      1  ; o   書き込みコマンド数                
gourTblCur     .RES.L      1  ; i/o グーロテーブルカレントアドレス    
gourTblCurR    .RES.L      1  ; i/o グーロカレントＶＲＡＭアドレス    
;
          .SECTION    SprSurface,DUMMY
vertNo0        .RES.W      1  ;      面を構成する頂点番号 0
vertNo1        .RES.W      1  ;      面を構成する頂点番号 1
vertNo2        .RES.W      1  ;      面を構成する頂点番号 2
vertNo3        .RES.W      1  ;      面を構成する頂点番号 3
drawMode       .RES.W      1  ;      描画モード
color          .RES.W      1  ;      カラーデータ
;
          .SECTION    SprDrawPrtyBlk,DUMMY
topNo          .RES.W      1
botNo          .RES.W      1
;
          .SECTION    SprSpCmd,DUMMY
cmdControl     .RES.W      1
cmdLink        .RES.W      1
cmdDrawMode    .RES.W      1
cmdColor       .RES.W      1
cmdCharAddr    .RES.W      1
cmdCharSize    .RES.W      1
cmdAx          .RES.W      1
cmdAy          .RES.W      1
cmdBx          .RES.W      1
cmdBy          .RES.W      1
cmdCx          .RES.W      1
cmdCy          .RES.W      1
cmdDx          .RES.W      1
cmdDy          .RES.W      1
cmdGrshAddr    .RES.W      1
cmdDummy       .RES.W      1
;
          .SECTION    SprCharTbl,DUMMY
charAddr       .RES.W      1
charXySize     .RES.W      1
charMode       .RES.W      1
charColor      .RES.W      1
charSize       .RES.W      1
;
          .SECTION    Work,DUMMY
_i	       .RES.L      1
_coordView3D   .RES.L      1
_coord2D       .RES.L      1
_vertBright    .RES.L      1
_shadingKind   .RES.L      1
_bothFaceFlag  .RES.L      1
_dispKind      .RES.L      1
_dispFlag      .RES.L      1
_wSurfBright   .RES.L      1
_wSurface      .RES.L      1
_mateKind      .RES.L      1
_drawMode      .RES.L      1
_drawColor     .RES.L      1
;
;
; コンスタント値定義
;
BOTH_FACE:		.EQU	H'00001000
ZSORT_MASK:		.EQU	H'00003000
ZSORT_MIN:		.EQU	H'00000000
ZSORT_MAX:		.EQU	H'00001000
DRAW_MODE_MASK:		.EQU	H'000007ff
SHADING_MASK:		.EQU	H'00000300
NO_SHADING:		.EQU	H'00000000
FLAT_SHADING:		.EQU	H'00000100
GOURAUD_SHADING:	.EQU	H'00000200
MATE_MASK:		.EQU	H'0000c000
MATE_TEXTURE:		.EQU	H'00004000
MATE_SHADING_TBL:	.EQU	H'00008000
DISP_MASK:		.EQU	H'0000c000
DISP_POLYGON:		.EQU	H'00000000
DISP_POLYLINE:		.EQU	H'00008000
DRAW_COLOR:		.EQU	H'00000038
N_DRAW_COLOR:		.EQU	~DRAW_COLOR
COLOR_1:		.EQU	H'00000008
JUMP_ASSIGN:		.EQU	H'00001000
ZOOM_NOPOINT:		.EQU	H'00000000
DIR_NOREV:		.EQU	H'00000000
FUNC_DISTORSP:		.EQU	H'00000002
FUNC_POLYGON:		.EQU	H'00000004
FUNC_POLYLINE:		.EQU	H'00000005
CTRL_DIR:		.EQU	H'00000030
DRAW_GOURAU:		.EQU	H'00000004
FIXED_0_25:		.EQU	H'00004000
CONST_C000:		.EQU	H'0000C000
CONST_3FFF:		.EQU	H'00003fff
;
TEX_CTRL:		.EQU    (JUMP_ASSIGN | ZOOM_NOPOINT | DIR_NOREV | FUNC_DISTORSP) & ~CTRL_DIR
;
POLYGON_CTRL:		.EQU    (JUMP_ASSIGN | ZOOM_NOPOINT | DIR_NOREV | FUNC_POLYGON)
;
POLYLINE_CTRL:		.EQU    (JUMP_ASSIGN | FUNC_POLYLINE)
;
          .SECTION    SEGA_P,CODE,ALIGN=4
;
;*****************************************************************************
;*
;* NAME:   SPR_3Tran2DtoCmd  -  Transfer 2D data to VDP1 Command
;*
;* PARAMETERS :
;*
;*     (1) T2DtoCmd *t2DtoCmd   - <i/o>  ２Ｄ−＞Ｃｍｄ　パラメータ
;*
;* DESCRIPTION:
;*
;*     ２Ｄ−＞Ｃｍｄ  ポリゴン描画コマンドの登録処理
;*
;*
;* POSTCONDITIONS:
;*
;*     No exist.
;*
;* CAVEATS:
;*
;*****************************************************************************
;
_SPR_3Tran2DtoCmd:          ; function: SPR_3Tran2DtoCmd
          MOV.L       R14,@-R15
          MOV.L       R13,@-R15
          MOV.L       R12,@-R15
          MOV.L       R11,@-R15
          MOV.L       R10,@-R15
          MOV.L       R9,@-R15
          MOV.L       R8,@-R15
          STS.L       MACH,@-R15
          STS.L       MACL,@-R15
          STS.L       PR,@-R15
;
          ADD         #-(SIZEOF Work),R15       ; Get Work Area
          MOV.L       R15,R14
;
          MOV.L       ComTbl,R5			; R5 = SpTComTbl
;
          MOV.L       @(coordView3D,R5),R6	; R6 = SpTComTbl.coordView3D
          MOV.L       R6,@(_coordView3D,R14)	; _coordView3D = R6
;
          MOV.L       @(coord2D,R5),R7		; R7 = SpTComTbl.coord2D
          MOV.L       R7,@(_coord2D,R14)	; _coord2D = R7
;
          MOV.L       @(vertBright,R5),R0	; R0 = SpTComTbl.vertBright
          MOV.L       R0,@(_vertBright,R14)	; _vertBright = R0
;
          MOV.L       @(dispFlag,R5),R10	; R10 = SpTComTbl.dispFlag
          MOV.L       #SHADING_MASK,R0
          AND         R0,R10			; R10 &= SHADING_MASK
          MOV.L       R10,@(_shadingKind,R14)	; _vertBright = R10
;
          MOV.L       @(dispFlag,R5),R10	; R10 = SpTComTbl.dispFlag
          MOV.L       #BOTH_FACE,R0
          AND         R0,R10			; R10 &= BOTH_FACE
          MOV.L       R10,@(_bothFaceFlag,R14)	; _bothFaceFlag = R10
;
          MOV.L       @(dispFlag,R5),R1		; R1 = SpTComTbl.dispFlag
          MOV.L       #DISP_MASK,R0
          AND         R0,R1			; R1 &= SHADING_MASK
          MOV.L       R1,@(_dispKind,R14)	; _dispKind = R1
;
          MOV.L       @(surfBright,R4),R8	; R8 = t2DtoCmd->surfBright
          MOV.L       R8,@(_wSurfBright,R14)	; _wSurfBright = R8
;
          MOV.L       @(surface,R4),R9		; R9 = t2DtoCmd->surface
          MOV.L       R9,@(_wSurface,R14)	; _wSurface = R9
;
          MOV.L       @(surfaceCount,R4),R0	; R0 = t2DtoCmd->surfaceCount
          MOV.L       R0,@(_i,R14)		; _i = R0
;
T2DC_00:
          CMP/EQ      #0,R0			; if(R0 != 0)
          BF          T2DC_000			;     goto T2DC_000
          BRA         T2DC_EXIT
          NOP
;
T2DC_000:
          MOV.L       @R8+,R1			; R1 = *wSurfBright++
	  MOV         R1,R0
          AND         #H'FF,R0
          MOV         R0,R11                    ; R11 = R1 & 0xff
          CMP/PZ      R1
          BT/S        T2DC_020                  ; if(R1 > 0) goto T2DC_020
          MOV         #1,R0
          CMP/PL      R10                       ; if(bothFace > 0)
          BT          T2DC_01                   ;     goto T2DC_01
          BRA         T2DC_99
          MOV         #0,R0                     ; R0 = 0, goto T2DC_99
T2DC_01:
          NEG         R11,R11
          ADD         #31,R11                   ; R11 = 31 - R11
          MOV         #2,R0                     ; R0 = 2
;
T2DC_020:
          MOV.L       R0,@(_dispFlag,R14)	; _dispFlag = R0
;
; 代表Ｚ値の取り出し
          MOV         #12,R13
;
          MOV.W       @R9+,R12                  ; R12 = wSurface->vertNo++
          EXTU.W      R12,R12
          MULU        R12,R13
          STS         MACL,R12
          ADD         R6,R12
          MOV.L       @(8,R12),R0               ; z = R0 = coordView3D[R12]
          MOV         R0,R1                     ; R1 = zSum = R0
          MOV         R0,R2                     ; R2 = zMin = R0
          MOV         R0,R3                     ; R3 = zMax = R0
;
          MOV.W       @R9+,R12                  ; R12 = wSurface->vertNo++
          EXTU.W      R12,R12
          MULU        R12,R13
          STS         MACL,R12
          ADD         R6,R12
          MOV.L       @(8,R12),R0               ; z = R0 = coordView3D[R12]
          ADD         R0,R1                     ; zSum += z
          CMP/GE      R2,R0                     ; if(zMin <= z)
          BT          T2DC_03                   ;     goto T2DC_03
          MOV         R0,R2                     ; zMin = z
T2DC_03:
          CMP/GE      R0,R3                     ; if(z <= zMax)
          BT          T2DC_04                   ;     goto T2DC_04
          MOV         R0,R3                     ; zMax = z
T2DC_04:
;
          MOV.W       @R9+,R12                  ; R12 = wSurface->vertNo++
          EXTU.W      R12,R12
          MULU        R12,R13
          STS         MACL,R12
          ADD         R6,R12
          MOV.L       @(8,R12),R0               ; z = R0 = coordView3D[R12]
          ADD         R0,R1                     ; zSum += z
          CMP/GE      R2,R0                     ; if(zMin <= z)
          BT          T2DC_05                   ;     goto T2DC_05
          MOV         R0,R2                     ; zMin = z
T2DC_05:
          CMP/GE      R0,R3                     ; if(z <= zMax)
          BT          T2DC_06                   ;     goto T2DC_06
          MOV         R0,R3                     ; zMax = z
T2DC_06:
;
          MOV.W       @R9+,R12                  ; R12 = wSurface->vertNo++
          EXTU.W      R12,R12
          MULU        R12,R13
          STS         MACL,R12
          ADD         R6,R12
          MOV.L       @(8,R12),R0               ; z = R0 = coordView3D[R12]
          ADD         R0,R1                     ; zSum += z
          CMP/GE      R2,R0                     ; if(zMin <= z)
          BT          T2DC_07                   ;     goto T2DC_07
          MOV         R0,R2                     ; zMin = z
T2DC_07:
          CMP/GE      R0,R3                     ; if(z <= zMax)
          BT          T2DC_08                   ;     goto T2DC_08
          MOV         R0,R3                     ; zMax = z
T2DC_08:
;
          ADD         #-8,R9
          MOV         #0,R0
          CMP/GE      R0,R3                      ; if(0 > zMax)
          BF          T2DC_080                   ;    goto T2DC_080
          BRA         T2DC_99
          NOP
;
T2DC_080:
          MOV.W       @(drawMode,R9),R0         ; R0 = wSurface->drawMode
          MOV.L       #ZSORT_MASK,R12
          AND         R12,R0			; R0 = zSortKind &= ZSORT_MASK
          MOV.L       #ZSORT_MIN,R12
          CMP/EQ      R12,R0                    ; if(R0 != ZSORT_MIN)
          BF          T2DC_09                   ;     goto T2DC_09
          BRA         T2DC_11                   ; R0 = z = zMin, goto T2DC_11
          MOV         R2,R0
T2DC_09:
          MOV.L       #ZSORT_MAX,R12
          CMP/EQ      R12,R0                    ; if(R0 != ZSORT_MAX)
          BF          T2DC_10                   ;     goto T2DC_09
          BRA         T2DC_11                   ; R0 = z = zMin, goto T2DC_11
          MOV         R3,R0
T2DC_10:
          MOV.L       #FIXED_0_25,R0
	  DMULS.L R1,R0
 	  STS	      MACH,R1
 	  STS	      MACL,R0
 	  XTRCT	      R1,R0                     ; R0 = z = ZSum * 0.25
T2DC_11:
;
; Ｚ値ブロックソートの最大値最小値を得る
          MOV.L       @(zSortZMin,R4),R1
          CMP/GE      R1,R0                     ; if(t2DtoCmd->zSortZMin <= z)
          BT          T2DC_12                   ;     goto T2DC_12
          MOV.L       R0,@(zSortZMin,R4)        ; t2DtoCmd->zSortZMin = z;
T2DC_12:
          MOV.L       @(zSortZMax,R4),R1
          CMP/GE      R0,R1                     ; if(z <= t2DtoCmd->zSortZMin)
          BT          T2DC_13                   ;     goto T2DC_13
          MOV.L       R0,@(zSortZMax,R4)        ; t2DtoCmd->zSortZMax = z;
T2DC_13:
          MOV.L       @(zSortBZMin,R5),R1
          CMP/GE      R0,R1                     ; if(z > SpTComTbl.zSortBZMin)
          BF          T2DC_14                   ;     goto T2DC_14
          BRA         T2DC_15
          MOV         #0,R0                     ; R0 = drawPrtyBlkNo = 0
T2DC_14:
          NEG         R1,R1
          ADD         R1,R0                     ; R0 -= SpTComTbl.zSortBZMin
          MOV.L       sftra,R3
          JSR         @R3                       ; R1 = SpTComTbl.zSftCnt
          MOV.L       @(zSftCnt,R5),R1          ; R0 = __sftra() = R0 >> R1
          MOV.L       @(zSortBlkCnt,R5),R1
          CMP/HI      R0,R1                     ; if(R0 <SpTComTbl.zSortBlkCnt)
          BT          T2DC_15                   ;    goto T2DC_15
          ADD         #-1,R1
          MOV         R1,R0                     ; R0 =SpTComTbl.zSortBlkCnt - 1
T2DC_15:
;
; コマンドエリアの獲得とコマンドプライオリティテーブルのセット
          SHLL2       R0
          MOV.L       @(prtyTbl,R4),R3
          ADD         R0,R3                     ; R3 = &prtyTbl[drawPrtyBlkNo]
;
          MOV.L       @(outCmdPos,R4),R1        ; R1 = t2DtoCmd->outCmdPos
          MOV         R1,R0                     ; R0 = cmdNo = R1
          ADD         #1,R0
          MOV.L       R0,@(outCmdPos,R4)        ; t2DtoCmd->outCmdPos += 1
;
          MOV         R1,R12
          SHLL2       R12
          SHLL2       R12
          SHLL        R12                       ; R12 = cmdNo * 32
          MOV.L       @(cmdBuf,R4),R2           ; R2 = t2DtoCmd->cmdBuf
          ADD         R2,R12                    ; R12 = spCmd = R2 + R12
;
          MOV.W       @(topNo,R3),R0
          EXTS.W      R0,R0                     ; R1 = prtyTbl->topNo
          MOV         #-1,R2                    ; R2 = 0xffffffff
          CMP/EQ      R0,R2                     ; if(prtyTbl->topNo != 0xffff)
          BF          T2DC_16                   ;     goto T2DC_16
          MOV         R1,R0
          BRA         T2DC_17                   ; prtyTbl->topNo = cmdNo,
          MOV.W       R0,@(topNo,R3)            ; goto T2DC_17
T2DC_16:
          MOV.W       @(botNo,R3),R0            ; R2 = prtyTbl->botNo
          EXTS.W      R0,R2
          SHLL2       R2
          SHLL2       R2
          SHLL        R2                        ; R2 = R2 * 32
          MOV.L       @(cmdBuf,R4),R0           ; R0 = t2DtoCmd->cmdBuf
          ADD         R0,R2                     ; R2 = wSpCmd = R2 + R0
          MOV         R1,R0
          MOV.W       R0,@(cmdLink,R2)          ; wSpCmd->link = cmdNo
T2DC_17:
          MOV.W       R0,@(botNo,R3)            ; prtyTbl->botNo = cmdNo
;
; ２Ｄデータの取り出し
          MOV         R12,R2
          ADD         #cmdAx,R2                 ; R2 = &spCmd->ax
;
          MOV.W       @R9+,R1                   ; R1 = wSurface->vertNo++
          EXTU.W      R1,R1
          SHLL2       R1
          ADD         R7,R1                     ; R1 = &coord2D[R1]
          MOV.L       @R1,R0
          MOV.L       R0,@R2                    ; spCmd->ax,ay = coord2D->x,y
;
          MOV.W       @R9+,R1                   ; R1 = wSurface->vertNo++
          EXTU.W      R1,R1
          SHLL2       R1
          ADD         R7,R1                     ; R1 = &coord2D[R1]
          MOV.L       @R1,R0
          MOV.L       R0,@(4,R2)                ; spCmd->bx,by = coord2D->x,y
;
          MOV.W       @R9+,R1                   ; R1 = wSurface->vertNo++
          EXTU.W      R1,R1
          SHLL2       R1
          ADD         R7,R1                     ; R1 = &coord2D[R1]
          MOV.L       @R1,R0
          MOV.L       R0,@(8,R2)                ; spCmd->cx,cy = coord2D->x,y
;
          MOV.W       @R9+,R1                   ; R1 = wSurface->vertNo++
          EXTU.W      R1,R1
          SHLL2       R1
          ADD         R7,R1                     ; R1 = &coord2D[R1]
          MOV.L       @R1,R0
          MOV.L       R0,@(12,R2)               ; spCmd->dx,dy = coord2D->x,y
;
          ADD         #-8,R9
;
          MOV         #0,R0
          MOV.W       R0,@(cmdGrshAddr,R12)     ; spCmd->grshAddr = 0
;
          MOV.W       @(color,R9),R0            ; R0 = wSurface->color
          MOV         R0,R13                    ; R13 = colOrTex = R0
;
          MOV.W       @(drawMode,R9),R0         ; R1 = wSurface->drawMode
          MOV         R0,R1
          MOV.L       #MATE_MASK,R2
          AND         R2,R0
          MOV.L       R0,@(_mateKind,R14)       ; mateKind = R1 & MATE_MASK
;
          MOV         R1,R0
          MOV.L       #DRAW_MODE_MASK,R2
          AND         R2,R0
          MOV.L       R0,@(_drawMode,R14)       ; drawMode = R1 & DRAW_MODE_MAS
;
          MOV.L       #DRAW_COLOR,R2
          AND         R2,R1
          MOV.L       R1,@(_drawColor,R14)      ; drawColor = R1 & DRAW_COLOR
;
;----------------------------------------------- フラットシェーディングチェック
;
          MOV.L       @(_shadingKind,R14),R1
          MOV.L       #FLAT_SHADING,R0
          CMP/EQ      R1,R0			; if(shadingKind == FLAT_SH)
          BT          T2DC_170			;     goto T2DC_170
          BRA         T2DC_300
          NOP
;
; フラットシェーディング描画コマンドの登録
T2DC_170:
          MOV.L       @(_mateKind,R14),R1
          MOV.L       #MATE_TEXTURE,R0
          CMP/EQ      R1,R0			; if(mateKind != MATE_TEXTURE)
          BF          T2DC_23			;     goto T2DC_23
;
;    テクスチャあり
          MOV.L       @(shdIdxTbl,R5),R0
          CMP/EQ      #0,R0        		; if(SpTComTbl.shdIdxTbl == 0)
          BT          T2DC_20			;     goto T2DC_20
;
          MOV.L       @R0,R3			; R3 = SpTComTbl.shdIdx[0]
          MOV.L       @(gourTblCurR,R4),R0      ; R0 = t2DtoCmd->gourTblCurR
          MOV.W       R0,@(cmdGrshAddr,R12)     ; spCmd->grshAddr = R0
          ADD         #1,R0
          MOV.L       R0,@(gourTblCurR,R4)      ; t2DtoCmd->gourTblCurR += 1
;
          MOV.L       @(gourTblCur,R4),R2       ; R2=gour =t2DtoCmd->gourTblCur
          MOV         R2,R0
          ADD         #8,R0
          MOV.L       R0,@(gourTblCur,R4)       ; t2DtoCmd->gourTblCur = R2 + 8
;
          MOV         R11,R0
          SHLL        R0
          MOV.W       @(R0,R3),R0               ; w = R0 = shadingTbl[sBright]
          MOV.W       R0,@R2                    ; gour[0] = w
          MOV.W       R0,@(2,R2)                ; gour[1] = w
          MOV.W       R0,@(4,R2)                ; gour[2] = w
          BRA         T2DC_21
          MOV.W       R0,@(6,R2)                ; gour[3] = w
T2DC_20:
          MOV         R11,R0
          SHLR        R0
          ADD         #8,R0                     ; w = (sBright/2) + 8
          MOV.L       @(gourGrayTopR,R5),R1
          ADD         R1,R0                     ; w += SpTComTbl.gourGrayTopR
          MOV.W       R0,@(cmdGrshAddr,R12)     ; spCmd->grshAddr = w
T2DC_21:
          MOV         R13,R1
          MOV.L       #CONST_C000,R0
          AND         R0,R1                     ; R1 = colOrTex & 0xc000
          SHLR8       R1
          SHLR2       R1			; textCtrl = R1 >>= 10
;
          MOV.L       #CONST_3FFF,R0
          AND         R13,R0                    ; R0 = colOrTex &= 0x3fff
;
          MOV         #10,R3
          MULU        R3,R0
          STS         MACL,R3                   ; R3 = R0 * 10
          MOV.L       @(charTbl,R5),R0
          ADD         R0,R3                     ; R3 = &charTbl[colOrTex]
;
          MOV.L       #TEX_CTRL,R0
          OR          R1,R0			; R0 = TEX_CTRL | textCtrl
          MOV.W       R0,@(cmdControl,R12)	; spCmd->control = R0
;
          MOV.W       @(charAddr,R3),R0		; R0 = charTbl->addr
          MOV.W       R0,@(cmdCharAddr,R12)	; spCmd->charAddr = R0
;
          MOV.W       @(charXySize,R3),R0	; R0 = charTbl->xySize
          MOV.W       R0,@(cmdCharSize,R12)	; spCmd->charSize = R0
;
          MOV.L       @(_drawMode,R14),R1
          MOV.L       #N_DRAW_COLOR,R0
          AND         R0,R1                     ; R1 = drawMode & ~DRAW_COLOR
          MOV.L       #DRAW_GOURAU,R0
          OR          R0,R1                     ; R1 |= DRAW_GOURAU
          MOV.W       @(charMode,R3),R0
          OR          R0,R1                     ; R1 |= charTbl->mode
          MOV.L       @(spriteDrawFlag,R5),R0   ; R0 = R1 | 
          OR          R1,R0                     ;      SpTComTbl.spriteDrawFlag
          MOV.W       R0,@(cmdDrawMode,R12)	; spCmd->charSize = R0
;
          MOV.W       @(charColor,R3),R0	; R0 = charTbl->color
          EXTU.W      R0,R0
;
          MOV.L       @(_drawColor,R14),R2
          MOV.L       #COLOR_1,R3
          CMP/EQ      R2,R3			; if(drawColor != COLOR_1)
          BF          T2DC_22			;     goto T2DC_22
          SHLL2       R0
          MOV.L       @(lookupTblR,R5),R1       ; R1 = SpTComTbl.lookupTblR
          ADD         R1,R0                     ; R0 = R1 + R0*4
T2DC_22:
          BRA         T2DC_99
          MOV.W       R0,@(cmdColor,R12)	; spCmd->color = R0
;
T2DC_23:
;    テクスチャなし
          MOV.L       #MATE_SHADING_TBL,R0
          CMP/EQ      R1,R0			; if(mateKind != MATE_SHADING_
          BF          T2DC_24			;    TBL) goto T2DC_24
;
          MOV.L       @(shdIdxTbl,R5),R0
          SHLL2       R13
          ADD         R13,R0
          MOV.L       @R0,R3			; R3 = SpTComTbl.shdIdx[R13]
          MOV         R11,R0
          SHLL        R0
          BRA         T2DC_25
          MOV.W       @(R0,R3),R0               ; R0 = shadingTbl[sBright]
T2DC_24:
          EXTU.W      R13,R1           ; R1  : r
          MOV.L       R1,R2            ; R2  : g
          MOV.L       R1,R3            ; R3  : b
          MOV         #31,R0
          AND         R0,R1            ; r =  baseRgbColor & 0x001f
          MOV.W       GS_03E0,R13
          AND         R13,R2
          SHLR2       R2
          SHLR2       R2
          SHLR        R2               ; g = (baseRgbColor & 0x03e0) >> 5
          MOV.W       GS_7C00,R0
          AND         R0,R3
          SHLR8       R3
          SHLR2       R3               ; b = (baseRgbColor & 0x7c00) >> 10
;
          MOV.L       GS_8000,R0       ; rgbColor  = 0x8000
          MUL.L       R1,R11
          STS         MACL,R1
          SHLR2       R1
          SHLR2       R1
          SHLR        R1
          ADD         R1,R0            ; rgbColor += (r * bright) >> 5
          MUL.L       R2,R11
          STS         MACL,R1
          AND         R13,R1
          ADD         R1,R0            ; rgbColor += ((g * bright) & 0x03e0)
          MUL.L       R3,R11
          STS         MACL,R1
          AND         R13,R1
          SHLL2       R1
          SHLL2       R1
          SHLL        R1
          ADD         R1,R0         ; rgbColor += ((b * bright) & 0x03e0) << 5
;
T2DC_25:
          MOV.L       @(_dispKind,R14),R2
          MOV.L       #DISP_POLYGON,R3
          CMP/EQ      R2,R3			; if(duspKind != DISP_POLYGON)
          BF          T2DC_27			;     goto T2DC_27
;
;      ポリゴン描画
          MOV.L       @(_drawColor,R14),R2
          MOV.L       #COLOR_1,R3
          CMP/EQ      R2,R3			; if(drawColor != COLOR_1)
          BF          T2DC_26			;     goto T2DC_26
          SHLL2       R0
          MOV.L       @(lookupTblR,R5),R1       ; R1 = SpTComTbl.lookupTblR
          ADD         R1,R0                     ; R0 = R1 + R0*4
T2DC_26:
          MOV.W       R0,@(cmdColor,R12)	; spCmd->color = R0
;
          MOV.L       #POLYGON_CTRL,R0
          MOV.W       R0,@(cmdControl,R12)	; spCmd->control = R0
;
          MOV.L       @(_drawMode,R14),R1
          MOV.L       @(otherDrawFlag,R5),R0    ; R0 = R1 | 
          OR          R1,R0                     ;      SpTComTbl.otherDrawFlag
          BRA         T2DC_99                   ; goto T2DC_99
          MOV.W       R0,@(cmdDrawMode,R12)	; spCmd->charSize = R0
;
T2DC_27:
;
;      ポリライン描画
          MOV.L       @(_drawColor,R14),R2
          MOV.L       #COLOR_1,R3
          CMP/EQ      R2,R3			; if(drawColor != COLOR_1)
          BF          T2DC_28			;     goto T2DC_28
          SHLL2       R0
          MOV.L       @(lookupTblR,R5),R1       ; R1 = SpTComTbl.lookupTblR
          ADD         R1,R0                     ; R0 = R1 + R0*4
T2DC_28:
          MOV.W       R0,@(cmdColor,R12)	; spCmd->color = R0
;
          MOV.L       #POLYLINE_CTRL,R0
          MOV.W       R0,@(cmdControl,R12)	; spCmd->control = R0
;
          MOV.L       @(_drawMode,R14),R1
          MOV.L       @(otherDrawFlag,R5),R0    ; R0 = R1 | 
          OR          R1,R0                     ;      SpTComTbl.otherDrawFlag
          BRA         T2DC_99                   ; goto T2DC_99
          MOV.W       R0,@(cmdDrawMode,R12)	; spCmd->charSize = R0
;
	.ALIGN	4
ComTbl:		.DATA.L		_SpTComTbl
sftra:		.DATA.L		__sftra
GS_03E0:	.DATA.W 	H'03E0
GS_7C00:  	.DATA.W     	H'7C00
GS_8000:  	.DATA.L     	H'00008000
;
;----------------------------------------------- グーローシェーディングチェック
;
T2DC_300:
          MOV.L       #GOURAUD_SHADING,R0
          CMP/EQ      R1,R0			; if(shadingKind == GOURAUD_SH)
          BT          T2DC_180			;     goto T2DC_180
          BRA         T2DC_40
          NOP
;
; グーローシェーディング描画コマンドの登録
T2DC_180:
          MOV.L       @(gourTblCurR,R4),R0      ; R0 = t2DtoCmd->gourTblCurR++
          MOV.W       R0,@(cmdGrshAddr,R12)     ; spCmd->grshAddr = R0
          ADD         #1,R0
          MOV.L       R0,@(gourTblCurR,R4) 
;
          MOV.L       @(gourTblCur,R4),R2       ; R2=gour =t2DtoCmd->gourTblCur
          MOV         R2,R0
          ADD         #8,R0
          MOV.L       R0,@(gourTblCur,R4)       ; t2DtoCmd->gourTblCur = R2 + 8
;
          MOV.L       @(shdIdxTbl,R5),R0
          CMP/EQ      #0,R0        		; if(SpTComTbl.shdIdxTbl == 0)
          BT          T2DC_30			;     goto T2DC_30
          BRA         T2DC_31			; R3 = SpTComTbl.shdIdx[0]
          MOV.L       @R0,R3			; , goto T2DC_31
T2DC_30:
          MOV.L       GrayCodePtr,R3            ; R3 = grayCode
T2DC_31:
          MOV.L       @(_vertBright,R14),R1     ; R1 = vertBright
          MOV.L       @(_dispFlag,R14),R0
          CMP/EQ      #1,R0                     ; if(dispFlag != 1)
          BF          T2DC_32                   ;     goto T2DC_32
;
          MOV.W       @R9+,R0                   ; R0 = wSurface->vertNo++
          EXTU.W      R0,R0
          SHLL2       R0
          ADD         R1,R0
          MOV.L       @R0,R0                    ; R0 = *(vertBright + R0*4)
          SHLL        R0
          ADD         R3,R0
          MOV.W       @R0,R0                    ; R0 = *(shadingTbl + R0*2)
          MOV.W       R0,@R2
          ADD         #2,R2                     ; gour++ = R0
;
          MOV.W       @R9+,R0                   ; R0 = wSurface->vertNo++
          EXTU.W      R0,R0
          SHLL2       R0
          ADD         R1,R0
          MOV.L       @R0,R0                    ; R0 = *(vertBright + R0*4)
          SHLL        R0
          ADD         R3,R0
          MOV.W       @R0,R0                    ; R0 = *(shadingTbl + R0*2)
          MOV.W       R0,@R2
          ADD         #2,R2                     ; gour++ = R0
;
          MOV.W       @R9+,R0                   ; R0 = wSurface->vertNo++
          EXTU.W      R0,R0
          SHLL2       R0
          ADD         R1,R0
          MOV.L       @R0,R0                    ; R0 = *(vertBright + R0*4)
          SHLL        R0
          ADD         R3,R0
          MOV.W       @R0,R0                    ; R0 = *(shadingTbl + R0*2)
          MOV.W       R0,@R2
          ADD         #2,R2                     ; gour++ = R0
;
          MOV.W       @R9+,R0                   ; R0 = wSurface->vertNo++
          EXTU.W      R0,R0
          SHLL2       R0
          ADD         R1,R0
          MOV.L       @R0,R0                    ; R0 = *(vertBright + R0*4)
          SHLL        R0
          ADD         R3,R0
          MOV.W       @R0,R0                    ; R0 = *(shadingTbl + R0*2)
          BRA         T2DC_33                   ; gour = R0, goto T2DC_33
          MOV.W       R0,@R2
T2DC_32:
          MOV.W       @R9+,R0                   ; R0 = wSurface->vertNo++
          EXTU.W      R0,R0
          SHLL2       R0
          ADD         R1,R0
          MOV.L       @R0,R0                    ; R0 = *(vertBright + R0*4)
          NEG         R0,R0
          ADD         #31,R0                    ; R0 = 31 - R0
          SHLL        R0
          ADD         R3,R0
          MOV.W       @R0,R0                    ; R0 = *(shadingTbl + R0*2)
          MOV.W       R0,@R2
          ADD         #2,R2                     ; gour++ = R0
;
          MOV.W       @R9+,R0                   ; R0 = wSurface->vertNo++
          EXTU.W      R0,R0
          SHLL2       R0
          ADD         R1,R0
          MOV.L       @R0,R0                    ; R0 = *(vertBright + R0*4)
          NEG         R0,R0
          ADD         #31,R0                    ; R0 = 31 - R0
          SHLL        R0
          ADD         R3,R0
          MOV.W       @R0,R0                    ; R0 = *(shadingTbl + R0*2)
          MOV.W       R0,@R2
          ADD         #2,R2                     ; gour++ = R0
;
          MOV.W       @R9+,R0                   ; R0 = wSurface->vertNo++
          EXTU.W      R0,R0
          SHLL2       R0
          ADD         R1,R0
          MOV.L       @R0,R0                    ; R0 = *(vertBright + R0*4)
          NEG         R0,R0
          ADD         #31,R0                    ; R0 = 31 - R0
          SHLL        R0
          ADD         R3,R0
          MOV.W       @R0,R0                    ; R0 = *(shadingTbl + R0*2)
          MOV.W       R0,@R2
          ADD         #2,R2                     ; gour++ = R0
;
          MOV.W       @R9+,R0                   ; R0 = wSurface->vertNo++
          EXTU.W      R0,R0
          SHLL2       R0
          ADD         R1,R0
          MOV.L       @R0,R0                    ; R0 = *(vertBright + R0*4)
          NEG         R0,R0
          ADD         #31,R0                    ; R0 = 31 - R0
          SHLL        R0
          ADD         R3,R0
          MOV.W       @R0,R0                    ; R0 = *(shadingTbl + R0*2)
          MOV.W       R0,@R2
;
T2DC_33:
          ADD         #-8,R9			; R9 -= 8
;
          MOV.L       @(_mateKind,R14),R1
          MOV.L       #MATE_TEXTURE,R0
          CMP/EQ      R1,R0			; if(mateKind != MATE_TEXTURE)
          BF          T2DC_35			;     goto T2DC_35
;
;    テクスチャあり
          MOV         R13,R1
          MOV.L       #CONST_C000,R0
          AND         R0,R1                     ; R1 = colOrTex & 0xc000
          SHLR8       R1
          SHLR2       R1			; textCtrl = R1 >>= 10
;
          MOV.L       #CONST_3FFF,R0
          AND         R13,R0                    ; R0 = colOrTex &= 0x3fff
;
          MOV         #10,R3
          MULU        R3,R0
          STS         MACL,R3                   ; R3 = R0 * 10
          MOV.L       @(charTbl,R5),R0
          ADD         R0,R3                     ; R3 = &charTbl[colOrTex]
;
          MOV.L       #TEX_CTRL,R0
          OR          R1,R0			; R0 = TEX_CTRL | textCtrl
          MOV.W       R0,@(cmdControl,R12)	; spCmd->control = R0
;
          MOV.W       @(charAddr,R3),R0		; R0 = charTbl->addr
          MOV.W       R0,@(cmdCharAddr,R12)	; spCmd->charAddr = R0
;
          MOV.W       @(charXySize,R3),R0	; R0 = charTbl->xySize
          MOV.W       R0,@(cmdCharSize,R12)	; spCmd->charSize = R0
;
          MOV.L       @(_drawMode,R14),R1
          MOV.L       #N_DRAW_COLOR,R0
          AND         R0,R1                     ; R1 = drawMode & ~DRAW_COLOR
          MOV.L       #DRAW_GOURAU,R0
          OR          R0,R1                     ; R1 |= DRAW_GOURAU
          MOV.W       @(charMode,R3),R0
          OR          R0,R1                     ; R1 |= charTbl->mode
          MOV.L       @(spriteDrawFlag,R5),R0   ; R0 = R1 | 
          OR          R1,R0                     ;      SpTComTbl.spriteDrawFlag
          MOV.W       R0,@(cmdDrawMode,R12)	; spCmd->charSize = R0
;
          MOV.W       @(charColor,R3),R0	; R0 = charTbl->color
          EXTU.W      R0,R0
;
          MOV.L       @(_drawColor,R14),R2
          MOV.L       #COLOR_1,R3
          CMP/EQ      R2,R3			; if(drawColor != COLOR_1)
          BF          T2DC_34			;     goto T2DC_34
          SHLL2       R0
          MOV.L       @(lookupTblR,R5),R1       ; R1 = SpTComTbl.lookupTblR
          ADD         R1,R0                     ; R0 = R1 + R0*4
T2DC_34:
          BRA         T2DC_99
          MOV.W       R0,@(cmdColor,R12)	; spCmd->color = R0
;
T2DC_35:
;    テクスチャなし
          MOV.L       @(_dispKind,R14),R2
          MOV.L       #DISP_POLYGON,R3
          CMP/EQ      R2,R3			; if(duspKind != DISP_POLYGON)
          BF          T2DC_37			;     goto T2DC_37
;
;      ポリゴン描画
          MOV.L       @(_drawColor,R14),R2
          MOV.L       #COLOR_1,R3
          CMP/EQ      R2,R3			; if(drawColor != COLOR_1)
          BF          T2DC_36			;     goto T2DC_36
          SHLL2       R13
          MOV.L       @(lookupTblR,R5),R1       ; R1 = SpTComTbl.lookupTblR
          ADD         R1,R13                    ; R13 = R1 + R13*4
T2DC_36:
          MOV         R13,R0
          MOV.W       R0,@(cmdColor,R12)	; spCmd->color = R13
;
          MOV.L       #POLYGON_CTRL,R0
          MOV.W       R0,@(cmdControl,R12)	; spCmd->control = R0
;
          MOV.L       @(_drawMode,R14),R1
          MOV.L       #DRAW_GOURAU,R2
          MOV.L       @(otherDrawFlag,R5),R0    ; R0 = R1 |
          OR          R2,R0                     ;      DRAW_GOUR | 
          OR          R1,R0                     ;      SpTComTbl.otherDrawFlag
          BRA         T2DC_99                   ; goto T2DC_99
          MOV.W       R0,@(cmdDrawMode,R12)	; spCmd->charSize = R0
;
T2DC_37:
;      ポリライン描画
          MOV.L       @(_drawColor,R14),R2
          MOV.L       #COLOR_1,R3
          CMP/EQ      R2,R3			; if(drawColor != COLOR_1)
          BF          T2DC_38			;     goto T2DC_38
          SHLL2       R13
          MOV.L       @(lookupTblR,R5),R1       ; R1 = SpTComTbl.lookupTblR
          ADD         R1,R13                    ; R13 = R1 + R13*4
T2DC_38:
          MOV         R13,R0
          MOV.W       R0,@(cmdColor,R12)	; spCmd->color = R13
;
          MOV.L       #POLYLINE_CTRL,R0
          MOV.W       R0,@(cmdControl,R12)	; spCmd->control = R0
;
          MOV.L       @(_drawMode,R14),R1
          MOV.L       #DRAW_GOURAU,R2
          MOV.L       @(otherDrawFlag,R5),R0    ; R0 = R1 | 
          OR          R2,R0                     ;      DRAW_GOUR | 
          OR          R1,R0                     ;      SpTComTbl.otherDrawFlag
          BRA         T2DC_99                   ; goto T2DC_99
          MOV.W       R0,@(cmdDrawMode,R12)	; spCmd->charSize = R0
;
;----------------------------------------------- ノンシェーディングチェック
;
T2DC_40:
          MOV.L       #NO_SHADING,R0
          CMP/EQ      R1,R0			; if(shadingKind == NO_SHADING)
          BT          T2DC_190			;     goto T2DC_190
          BRA         T2DC_99
T2DC_190:
          MOV.L       @(_mateKind,R14),R1
          MOV.L       #MATE_TEXTURE,R0
          CMP/EQ      R1,R0			; if(mateKind != MATE_TEXTURE)
          BF          T2DC_45			;     goto T2DC_45
;
;    テクスチャあり
          MOV         R13,R1
          MOV.L       #CONST_C000,R0
          AND         R0,R1                     ; R1 = colOrTex & 0xc000
          SHLR8       R1
          SHLR2       R1			; textCtrl = R1 >>= 10
;
          MOV.L       #CONST_3FFF,R0
          AND         R13,R0                    ; R0 = colOrTex &= 0x3fff
;
          MOV         #10,R3
          MULU        R3,R0
          STS         MACL,R3                   ; R3 = R0 * 10
          MOV.L       @(charTbl,R5),R0
          ADD         R0,R3                     ; R3 = &charTbl[colOrTex]
;
          MOV.L       #TEX_CTRL,R0
          OR          R1,R0			; R0 = TEX_CTRL | textCtrl
          MOV.W       R0,@(cmdControl,R12)	; spCmd->control = R0
;
          MOV.W       @(charAddr,R3),R0		; R0 = charTbl->addr
          MOV.W       R0,@(cmdCharAddr,R12)	; spCmd->charAddr = R0
;
          MOV.W       @(charXySize,R3),R0	; R0 = charTbl->xySize
          MOV.W       R0,@(cmdCharSize,R12)	; spCmd->charSize = R0
;
          MOV.L       @(_drawMode,R14),R1
          MOV.L       #N_DRAW_COLOR,R0
          AND         R0,R1                     ; R1 = drawMode & ~DRAW_COLOR
          MOV.W       @(charMode,R3),R0
          OR          R0,R1                     ; R1 |= charTbl->mode
          MOV.L       @(spriteDrawFlag,R5),R0   ; R0 = R1 | 
          OR          R1,R0                     ;      SpTComTbl.spriteDrawFlag
          MOV.W       R0,@(cmdDrawMode,R12)	; spCmd->charSize = R0
;
          MOV.W       @(charColor,R3),R0	; R0 = charTbl->color
          EXTU.W      R0,R0
;
          MOV.L       @(_drawColor,R14),R2
          MOV.L       #COLOR_1,R3
          CMP/EQ      R2,R3			; if(drawColor != COLOR_1)
          BF          T2DC_44			;     goto T2DC_44
          SHLL2       R0
          MOV.L       @(lookupTblR,R5),R1       ; R1 = SpTComTbl.lookupTblR
          ADD         R1,R0                     ; R0 = R1 + R0*4
T2DC_44:
          BRA         T2DC_99
          MOV.W       R0,@(cmdColor,R12)	; spCmd->color = R0
;
T2DC_45:
;    テクスチャなし
          MOV.L       @(_dispKind,R14),R2
          MOV.L       #DISP_POLYGON,R3
          CMP/EQ      R2,R3			; if(duspKind != DISP_POLYGON)
          BF          T2DC_47			;     goto T2DC_47
;
;      ポリゴン描画
          MOV.L       @(_drawColor,R14),R2
          MOV.L       #COLOR_1,R3
          CMP/EQ      R2,R3			; if(drawColor != COLOR_1)
          BF          T2DC_46			;     goto T2DC_46
          SHLL2       R13
          MOV.L       @(lookupTblR,R5),R1       ; R1 = SpTComTbl.lookupTblR
          ADD         R1,R13                    ; R13 = R1 + R13*4
T2DC_46:
          MOV         R13,R0
          MOV.W       R0,@(cmdColor,R12)	; spCmd->color = R13
;
          MOV.L       #POLYGON_CTRL,R0
          MOV.W       R0,@(cmdControl,R12)	; spCmd->control = R0
;
          MOV.L       @(_drawMode,R14),R1
          MOV.L       @(otherDrawFlag,R5),R0    ; R0 = R1 |
          OR          R1,R0                     ;      SpTComTbl.otherDrawFlag
          BRA         T2DC_99                   ; goto T2DC_99
          MOV.W       R0,@(cmdDrawMode,R12)	; spCmd->charSize = R0
;
T2DC_47:
;      ポリライン描画
          MOV.L       @(_drawColor,R14),R2
          MOV.L       #COLOR_1,R3
          CMP/EQ      R2,R3			; if(drawColor != COLOR_1)
          BF          T2DC_48			;     goto T2DC_48
          SHLL2       R13
          MOV.L       @(lookupTblR,R5),R1       ; R1 = SpTComTbl.lookupTblR
          ADD         R1,R13                    ; R13 = R1 + R13*4
T2DC_48:
          MOV         R13,R0
          MOV.W       R0,@(cmdColor,R12)	; spCmd->color = R13
;
          MOV.L       #POLYLINE_CTRL,R0
          MOV.W       R0,@(cmdControl,R12)	; spCmd->control = R0
;
          MOV.L       @(_drawMode,R14),R1
          MOV.L       @(otherDrawFlag,R5),R0    ; R0 = R1 | 
          OR          R1,R0                     ;      SpTComTbl.otherDrawFlag
          MOV.W       R0,@(cmdDrawMode,R12)	; spCmd->charSize = R0
;
T2DC_99:
          MOV.L       @(_i,R14),R0
          ADD         #-1,R0
          MOV.L       R0,@(_i,R14)		; _i = _i - 1
          BRA         T2DC_00                   ; *Surface++, goto T2DC_00
          ADD         #12,R9
;
T2DC_EXIT:
          ADD         #(SIZEOF Work),R15        ; Release Work Area
;
          LDS.L       @R15+,PR
          LDS.L       @R15+,MACL
          LDS.L       @R15+,MACH
          MOV.L       @R15+,R8
          MOV.L       @R15+,R9
          MOV.L       @R15+,R10
          MOV.L       @R15+,R11
          MOV.L       @R15+,R12
          MOV.L       @R15+,R13
          RTS
          MOV.L       @R15+,R14
;
;
	.ALIGN	4
GrayCodePtr:  	.DATA.L     	grayCode
grayCode:       .DATA.W         H'8000
                .DATA.W         H'8421
                .DATA.W         H'8842
                .DATA.W         H'8C63
                .DATA.W         H'9084
                .DATA.W         H'94A5
                .DATA.W         H'98C6
                .DATA.W         H'9CE7
                .DATA.W         H'A108
                .DATA.W         H'A529
                .DATA.W         H'A94A
                .DATA.W         H'AD6B
                .DATA.W         H'B18C
                .DATA.W         H'B5AD
                .DATA.W         H'B9CE
                .DATA.W         H'BDEF
                .DATA.W         H'C210
                .DATA.W         H'C631
                .DATA.W         H'CA52
                .DATA.W         H'CE73
                .DATA.W         H'D294
                .DATA.W         H'D6B5
                .DATA.W         H'DAD6
                .DATA.W         H'DEF7
                .DATA.W         H'E318
                .DATA.W         H'E739
                .DATA.W         H'EB5A
                .DATA.W         H'EF7B
                .DATA.W         H'F39C
                .DATA.W         H'F7BD
                .DATA.W         H'FBDE
                .DATA.W         H'FFFF
;
          .END
